package org.soderiakelvy.controller.sujeto;

import java.io.Serializable;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.controller.util.Util;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.domain.SujetoVO;
import org.soderiakelvy.model.domain.VisitaVO;
import org.soderiakelvy.model.service.SucursalServicio;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.SucursalServicioImp;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;
import org.soderiakelvy.model.util.ConstantModel;

@ManagedBean
@ViewScoped
public class SujetoEmpresaSucursal implements Serializable{
	
	private static final long serialVersionUID = -3364911208629178918L;
	
	//--- VO ---
	private SucursalVO sucursal;
	private SujetoVO sujeto;
	//----------
	//--- SERVICE ---
	private SucursalServicio serviceSucursal;
	private SujetoServicio serviceSujeto;
	//---------------
	//--- Variables ---
	private boolean isUpdate;
	private boolean sujetoResidencial;
	public String tipoCrud;
	public String titulo;
	//-----------------
	
	
	//--- CONSTRUCTOR ---
	public SujetoEmpresaSucursal(){
		sucursal = new SucursalVO();
		serviceSucursal = new SucursalServicioImp();
		serviceSujeto  	= new SujetoServicioImpl();
		getTipoCrud();
	}
	
	private void getTipoCrud(){
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		//tipoCrud = (String) sessionParams.get("tipoCrudSucursal");
		sucursal = (SucursalVO) sessionParams.get("sucursalCreate");
		
		//fc.getExternalContext().getSessionMap().remove("tipoCrudSucursal");
		fc.getExternalContext().getSessionMap().remove("sucursalCreate");
		
		if(sucursal !=null){			
			sujeto = sucursal.getSujeto();
			if(sucursal.getSucursalId() == null){
				titulo = "Alta Sujeto - Crear Sucursal";
				isUpdate = false;
			}else{
				titulo = "Modificar Sujeto - Modificar Sucursal"; 
				isUpdate = true;
			}
			
			if(sujeto.getTipoSujeto().equals(Constante.SUJETO_RESIDENCIAL)){
				sujetoResidencial = true;
			}else sujetoResidencial = false;
		}
	}
	//-------------------

	public String guardarSucursal(SucursalVO suc){
		SujetoServicio ser = new SujetoServicioImpl();
		String resultUpdateCreate;
		this.sucursal = suc;
		if(isUpdate){
			if(updateSucursal()){
				//--Vuelvo al listado de sucursales
				return "sujetoEmpresaSucursalesList.xhtml?faces-redirect=true";
			}else return null;
		}else {
			if(sujetoResidencial){
				ser.insertSujetoVO(sujeto);
			}
			this.sucursal = suc;
			this.sucursal.setSujeto(this.sujeto);
			this.sucursal.setProvincia("CORDOBA");
			this.sucursal.setLocalidad("CORDOBA");
			this.sucursal.setNumeroSucursal(serviceSucursal.getUltimoNumeroSucursal(this.sujeto));
			resultUpdateCreate = serviceSucursal.insertSucursal(sucursal); 
			if(resultUpdateCreate.equals(ConstantModel.SUCCESS)){
				sucursal.setDomicilioCompleto(Util.getDireccion(sucursal));
				FacesContext fc = FacesContext.getCurrentInstance();
				Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
				sessionParams.put("tipoCrudVisita",Constante.SUJETO_EMPRESA_VISITA_CREATE);
				VisitaVO visita = new VisitaVO();
				visita.setSucursal(sucursal);
				sessionParams.put("visitaUpdateCreate", visita);
				return "sujetoEmpresaVisita.xhtml?faces-redirect=true";
			}else {
				return null;
			}
		}
	}
	
	
	private boolean updateSucursal(){
		boolean result;
		if(sucursal.getSujeto().getTipoSujeto().equals(Constante.SUJETO_RESIDENCIAL)){
			serviceSujeto.updateSujetoVO(sujeto);
		}
		String resultUpdate = serviceSucursal.updateSucursal(sucursal);
		if(resultUpdate.equals(ConstantModel.SUCCESS)){
			result =  true;
		}else result =  false;
		return result;
	}
	
	public String btnCancelar(){
		String result = "";
		if(!isUpdate){
			if(sujeto.getSujetoId() == null){
				result = "index.xhtml";
			}
		}else {
			result = "index.xhtml";
		}
		return result;
	}
	
	//--- GET AND SET ---
	public SucursalVO getSucursal() {
		return sucursal;
	}
	
	public boolean isUpdate() {
		return isUpdate;
	}
	
	public String getTitulo() {
		return titulo;
	}
	
	public boolean getSujetoResidencial(){
		return sujetoResidencial;
	}
	
	public SujetoVO getSujeto(){
		return sujeto;
	}
	//-------------------
}
